package com.ruoyi.wxlogin.config;

import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.netty.http.client.HttpClient;

import javax.net.ssl.SSLException;

/**
 * @author yun_kai
 * @date 2023年02月10日, 0010
 */
@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient() throws SSLException {
        SslContext sslContext = SslContextBuilder  //创建一个SslContextBuilder对象，用于配置SSL上下文。
                .forClient()                        //指定为客户端配置SSL。
                .trustManager(InsecureTrustManagerFactory.INSTANCE) //指定信任管理器为InsecureTrustManagerFactory.INSTANCE，即信任所有证书。
                .build();
        HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(sslContext)); //配置HttpClient为安全模式，并传入之前创建的SSL上下文。
        return WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient)).build(); //使用WebClient构建器创建一个WebClient实例，使用配置好的HttpClient作为客户端连接器。
    }
}
